#ifndef INCLUDED_GAMESTATE_H
#define INCLUDED_GAMESTATE_H

#include <SGE.h>
using namespace SGE;

#include "GameContext.h"

enum NextState
{
	None, 
	Frontend,
	Gameplay,
	Help,
	Quit
};

class GameState
{
	public:
		//game context needs to exist before a game state exists
		//	pass by reference prevents nullptr
		GameState(GameContext& gc);
		//virtual destructor, destructs from child to parent. 
		//required when a class has virtual hierarchy 
		virtual ~GameState();

		//pure virtual, abstract base class that cannot be instantiated
		virtual void Load() = 0;
		virtual void Unload() = 0;
		virtual NextState Update(float deltaTime) = 0;
		virtual void Render() = 0;

	protected:
		GameContext& mGameContext;
};
#endif // #ifndef INCLUDED_GAMESTATE_H